package com.ruoyi.file.utils;

import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.file.domain.SysStorageConfig;
import com.ruoyi.file.service.ISysStorageConfigService;

/**
 * 存储配置工具类
 * 统一处理存储配置的获取和验证逻辑
 *
 * @author ruoyi
 */
public class StorageConfigUtils {

    /**
     * 获取并验证存储配置
     *
     * @param configId               配置ID（可为空，为空时获取默认配置）
     * @param storageConfigService   存储配置服务
     * @return 验证通过的存储配置
     * @throws ServiceException 当配置不存在或无效时抛出异常
     */
    public static SysStorageConfig getAndValidateConfig(Long configId, ISysStorageConfigService storageConfigService) {
        SysStorageConfig config;
        
        if (configId != null) {
            config = storageConfigService.getConfigById(configId);
            if (config == null) {
                throw new ServiceException("指定的存储配置不存在");
            }
        } else {
            config = storageConfigService.getDefaultConfig();
            if (config == null) {
                throw new ServiceException("未找到默认存储配置");
            }
        }

        // 验证配置状态
        if (!FileValidationUtils.isStorageConfigValid(config)) {
            throw new ServiceException("存储配置已停用");
        }

        // 验证配置完整性
        if (!FileValidationUtils.isStorageConfigComplete(config)) {
            throw new ServiceException("存储配置不完整，缺少必要参数");
        }

        return config;
    }

    /**
     * 获取存储配置（不抛出异常）
     *
     * @param configId               配置ID（可为空，为空时获取默认配置）
     * @param storageConfigService   存储配置服务
     * @return 存储配置，如果不存在或无效则返回null
     */
    public static SysStorageConfig getConfigSafely(Long configId, ISysStorageConfigService storageConfigService) {
        try {
            return getAndValidateConfig(configId, storageConfigService);
        } catch (ServiceException e) {
            return null;
        }
    }

    /**
     * 验证存储配置并返回验证结果
     *
     * @param config 存储配置
     * @return 验证结果信息，如果验证通过则返回null
     */
    public static String validateConfig(SysStorageConfig config) {
        if (config == null) {
            return "存储配置不存在";
        }

        if (!FileValidationUtils.isStorageConfigValid(config)) {
            return "存储配置已停用";
        }

        if (!FileValidationUtils.isStorageConfigComplete(config)) {
            return "存储配置不完整，缺少必要参数";
        }

        return null; // 验证通过
    }
}
